package com.whfc.mach.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.whfc.common.obd.ObdFrame;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 设备信息DTO
 *
 * @ClasssName AppMachDTO
 * @Author hw
 * @Date 2020/8/18 15:35
 * @Version 1.0
 */
@Data
public class AppMachDTO implements Serializable {

    /**
     * 组织机构
     */
    private Integer deptId;

    /**
     * 组织机构
     */
    private String deptName;

    /**
     * 设备ID
     */
    private Integer machId;

    /**
     * 设备ID
     */
    private Integer id;

    /**
     * 设备编码
     */
    private String machCode;

    /**
     * 设备名称
     */
    private String machName;

    /**
     * 设备类型ID
     */
    private Integer machType;

    /**
     * 设备类型编码
     */
    private String machTypeCode;

    /**
     * 设备类型名称
     */
    private String machTypeName;

    private Integer subMachType;

    private String subMachTypeName;

    /**
     * 设备类型图标
     */
    private String machTypeIcon;

    /**
     * 设备品牌型号
     */
    private String machModelName;

    /**
     * 设备二维码地址
     */
    private String qr;

    /**
     * 设备出厂时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date deliveryTime;

    /**
     * 资产编号
     */
    private String assetCode;

    /**
     * 出厂编码
     */
    private String deliveryCode;

    /**
     * 使用部位
     */
    private String partName;

    /**
     * 生产厂家
     */
    private String manufacturer;

    /**
     * 设备累计工作时长
     */
    private Double totalWorkHours;

    /**
     * 在场状态 0-不在场 1-在场
     */
    private Integer state;

    /**
     * 进场时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date enterTime;

    /**
     * 退场时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date outerTime;

    /**
     * 最近硬件通信时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date time;

    /**
     * 坐标时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date gpsTime;

    /**
     * 网络状态
     */
    private Integer netState;

    /**
     * 网络状态-持续时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date netStateStartTime;

    /**
     * 工作状态
     */
    private Integer workState;

    /**
     * 工作状态-持续时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date workStateStartTime;

    /**
     * 电量百分比
     */
    private Integer batteryPower;

    /**
     * 经度
     */
    private Double lng;

    /**
     * 纬度
     */
    private Double lat;

    /**
     * 经度
     */
    private Double lngWgs84;

    /**
     * 纬度
     */
    private Double latWgs84;

    /**
     * 定位地址
     */
    private String location;

    /**
     * 图片
     */
    private List<String> imgList;

    /**
     * 操作手
     */
    private List<MachOperEmpDTO> operEmpList;

    /**
     * 机械图标
     */
    private String icon;

    /**
     * 油箱高度
     */
    private Double oilTankHeight;

    /**
     * 油箱容积
     */
    private Double oilTankVolume;

    /**
     * 压力值
     */
    private Double pressure;

    /**
     * 油位
     */
    private Integer oilPos;

    /**
     * 剩余油量
     */
    private Double remainOil;

    /**
     * 剩余油量百分比
     */
    private Double remainOilPercent;

    /**
     * 开机时长
     */
    private Double totalTimes;

    /**
     * 工作时长
     */
    private Double workTimes;

    /**
     * 怠机时长
     */
    private Double idleTimes;

    /**
     * 停机时长
     */
    private Double stopTimes;

    /**
     * 是否绑定
     */
    private Integer bindFlag;

    /**
     * 硬件SN
     */
    private String sn;

    /**
     * 硬件id
     */
    private Integer deviceId;

    /**
     * 设备类型 1-机械云管家 11-obd设备
     */
    private Integer deviceType;

    /**
     * 持有单位id
     */
    private Integer corpId;

    /**
     * 持有单位名称
     */
    private String corpName;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 数据帧列表
     */
    private List<ObdFrame> frameList;

    /**
     * 总里程
     */
    private Long mile;

    /**
     * 总油耗
     */
    private Double totalOilWear;

    /**
     * 是否需要保养 0-待保养 1-已保养
     */
    private Integer maintainState;

    /**
     * 保养时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date maintainTime;


    @Override
    public int hashCode() {
        return id.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof AppMachDTO) {
            AppMachDTO dto = (AppMachDTO) obj;
            return this.id.equals(dto.getId());
        }
        return false;
    }
}
